package com.nbcio.im.core;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;

import java.time.LocalDateTime;

/**
 * IM消息实体
 *
 * @author nbacheng
 */
@Data
@TableName("im_message")
public class ImMessage {
    
    /**
     * 消息ID
     */
    @TableId(value = "message_id", type = IdType.INPUT)
    private String messageId;
    
    /**
     * 租户ID
     */
    @TableField("tenant_id")
    private String tenantId;
    
    /**
     * 发送者用户ID
     */
    @TableField("from_user_id")
    private Long fromUserId;
    
    /**
     * 接收者用户ID（私聊）
     */
    @TableField("to_user_id")
    private Long toUserId;
    
    /**
     * 群组ID（群聊）
     */
    @TableField("group_id")
    private String groupId;
    
    /**
     * 消息内容
     */
    @TableField("content")
    private String content;
    
    /**
     * 消息类型：text, image, file, voice, video, system
     */
    @TableField("message_type")
    private String messageType;
    
    /**
     * 消息状态：sending, sent, delivered, read, failed
     */
    @TableField("status")
    private String status;
    
    /**
     * 创建时间
     */
    @TableField("create_time")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime createTime;
    
    /**
     * 是否已读
     */
    @TableField("is_read")
    private Integer isRead;
    
    /**
     * 已读时间（暂时注释，因为数据库表中还没有这个字段）
     */
    // @TableField("read_time")
    // @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    // private LocalDateTime readTime;
    
    /**
     * 扩展数据
     */
    @TableField("extra")
    private String extra;
    
    /**
     * 消息来源：user, system, bot
     */
    @TableField("source")
    private String source;
    
    /**
     * 是否撤回
     */
    @TableField("is_revoked")
    private Integer isRevoked;
    
    /**
     * 撤回时间
     */
    @TableField("revoke_time")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime revokeTime;
}
